package com.zking.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * 数据库操作接口
 */
public interface BaseDao {

	/** 
	 * 获取数据库连接 
	 */ 
	public Connection getConnection() throws SQLException; 

	/** 
	 * 关闭连接 
	 */ 
	public void CloseConnection() throws SQLException; 

	/** 
	 * 执行查询，将某一行的结果保存到Bean中
	 * @param <T> 
	 * @param beanClass 类的反射
	 * @param sql sql语句
	 * @param params 预编译可变参数
	 */
	public <T> T findBean(Class<T> beanClass, String sql,
                          Object... params) throws SQLException;

	/** 
	 * 执行查询，将某一行的结果保存到Bean中 <br>
	 * 没有传入参数 老接口方法 保留  <br>
	 * @param <T> 
	 * @param beanClass 类的反射
	 * @param sql sql语句
	 * @param params 预编译可变参数
	 */
	@Deprecated
	public  <T> T findBean(Class<T> beanClass, String sql) throws SQLException; 

	/** 
	 * 执行查询，将每行的结果保存到Bean中，然后将所有Bean保存到List中  <br>
	 * @param beanClass 反射
	 * @param sql sql语句 
	 * @param params 预编译可变参数
	 */ 
	public  <T> List<T> findList(Class<T> beanClass, String sql,
                                 Object... params) throws SQLException ;

	/**
	 * 执行查询，将每行的结果保存到Bean中，然后将所有Bean保存到List中 <br>
	 * 没有传入参数 老接口方法 保留  <br>
	 * @param <T> 实体类型
	 * @param beanClass 反射
	 * @param sql sql语句
	 */
	public  <T> List<T> findList(Class<T> beanClass, String sql) throws SQLException; 



	/** 
	 * 查询记录总条数 
	 * @param sql sql语句 
	 * @return 记录总数 
	 */ 
	public long getCount(String sql, Object... params) throws SQLException; 

	/** 
	 * 查询记录总条数 
	 * 没有传入参数 老接口方法 保留 
	 * @param sql sql语句 
	 * @return 记录总数 
	 */
	@Deprecated
	public  int count(String sql)throws SQLException; 

	/** 
	 * 执行INSERT/UPDATE/DELETE语句 
	 * @param sql sql语句
	 * @param params 预编译可变参数
	 */ 
	public int update(String sql, Object... params)throws SQLException; 

	/** 
	 * 批量执行指定的SQL语句 .效率高.
	 * @param sql 
	 * @param params 批量执行的二维数组参数列表
	 */ 
	public int[] batch(String sql, Object[][] params)throws SQLException; 
}
